package org.grade.controller;

import org.grade.bean.request.Region.*;
import org.grade.common.Result;
import org.grade.manage.ExamInfoManage;
import org.grade.manage.PaperMarkingManage;
import org.grade.manage.RegionDivideManage;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;

/**
 * 处理与试卷区域相关的HTTP请求
 */
@RestController
@RequestMapping("/region")
public class RegionController {
    @Resource
    private ExamInfoManage examInfoManage;

    @Resource
    private PaperMarkingManage paperMarkingManage;

    @Resource
    private RegionDivideManage regionDivideManage;

    /**
     * 处理区域添加的POST请求。
     * 接收一个RegionAddRequest对象和多个文件
     * 然后调用RegionDivideManage的divideRegion方法处理该请求
     * @param request
     * @param files
     * @return
     */
    @PostMapping("/add")
    public Result divideRegion(@RequestPart("entity") RegionAddRequest request,
                            @RequestPart("template") MultipartFile[] files) {
        return regionDivideManage.divideRegion(request, files);
    }


    /**
     * 查询模板信息。
     * 接收一个TemplateGetRequest对象，然后调用RegionDivideManage的getTemplate方法获取模板信息。
     * @param request
     * @return
     */
    @PostMapping("/point/get")
    public Result template(@RequestBody TemplateGetRequest request) {
        return regionDivideManage.getTemplate(request);
    }

    /**
     * 查询评分区域。
     * 接收一个RegionListRequest对象，调用PaperMarkingManage的queryGradingRegion方法处理请求
     * @param request
     * @return
     */
    @PostMapping("/imageList")
    public Result queryGradingRegion(@RequestBody RegionListRequest request) {
        return paperMarkingManage.queryGradingRegion(request);
    }

    /**
     * 查询区域分数。
     * 接收一个RegionGetScoreRequest对象，调用PaperMarkingManage的queryRegionScore方法获取分数信息。
     * @param request
     * @return
     */
    @PostMapping("/getScore")
    public Result queryRegionScore(@RequestBody RegionGetScoreRequest request)  {
        return paperMarkingManage.queryRegionScore(request);
    }

    /**
     * 更新区域分数。
     * 接收一个RegionPutScoreRequest对象，调用PaperMarkingManage的updateRegionScore方法更新分数
     * @param request
     * @return
     */
    @PostMapping("/putScore")
    public Result updateRegionScore(@RequestBody RegionPutScoreRequest request) {
        return paperMarkingManage.updateRegionScore(request);
    }

    /**
     * 查询已评估试卷数量。
     * 接收一个RegionGetNumberRequest对象，调用PaperMarkingManage的queryEvaluatedCount方法获取数量
     * @param request
     * @return
     */
    @PostMapping("/getNumber")
    public Result queryEvaluatedCount(@RequestBody RegionGetNumberRequest request) {
        return paperMarkingManage.queryEvaluatedCount(request);
    }

    /**
     * 提交智能评分。
     * 接收一个RegionIntelScoreRequest对象和一张图片文件，调用PaperMarkingManage的putIntelScore方法处理智能评分请求
     * @param request
     * @param images
     * @return
     */
    @PostMapping("/putIntelScore")
    public Result putIntelScore(@RequestPart("entity") RegionIntelScoreRequest request,
                                @RequestPart("images") MultipartFile images) {
        return paperMarkingManage.putIntelScore(request, images);
    }

    /**
     * 查询区域内容。
     * 接收一个RegionGetContentRequest对象，调用ExamInfoManage的queryRegionContent方法获取区域内容。
     * @param request
     * @return
     */
    @PostMapping("/getContent")
    public Result queryRegionContent(@RequestBody RegionGetContentRequest request) {
        return examInfoManage.queryRegionContent(request);
    }

    /**
     * 查询区域列表。
     * 接收一个RegionImageRequest对象，调用ExamInfoManage的queryRegionList方法获取区域列表
     * @param request
     * @return
     */
    @PostMapping("/regionList")
    public Result queryRegionList(@RequestBody RegionImageRequest request) {
        return examInfoManage.queryRegionList(request);
    }

    /**
     * 查询内容和分数。
     * 接收一个RegionContentRequest对象，调用ExamInfoManage的queryContentAndScore方法获取内容和分数的信息
     * @param request
     * @return
     */
    @PostMapping("/getContentAndScore")
    public Result queryContentAndScore(@RequestBody RegionContentRequest request) {
        return examInfoManage.queryContentAndScore(request);
    }
}
